#!/usr/bin/python3
#coding=utf8

from plugins import BaseConfig,BasePOC,BaseEXP
from lib.log import Logger
import socket

class CONFIG(BaseConfig):
    port = 6379
    help = 'Redis 未授权访问'
    desc = """redis 默认不需要密码即可访问，黑客直接访问即可获取数据库中所有信息，造成严重的信息泄露。
              解决方案
                  配置bind选项, 限定可以连接Redis服务器的IP, 并修改redis的默认端口6379.
                  配置AUTH, 设置密码, 密码会以明文方式保存在redis配置文件中.
                  配置rename-command CONFIG "RENAME_CONFIG", 这样即使存在未授权访问, 也能够给攻击者使用config指令加大难度
                  好消息是Redis作者表示将会开发”real user”，区分普通用户和admin权限，普通用户将会被禁止运行某些命令，如config
           """

class POC(BasePOC):
    def test(self,host,port):
    	  self.log.info('正在扫描 %s:%s redis空密码漏洞中...'%(host,port))
        payload = '\x2a\x31\x0d\x0a\x24\x34\x0d\x0a\x69\x6e\x66\x6f\x0d\x0a'
        s = socket.socket()
        socket.setdefaulttimeout(CONFIG.sock_timeout)
        try:
            s.connect((host,port))
            s.send(payload)
            recvdata = s.recv(1024)
            if recvdata and 'redis_version' in recvdata:
                self.log.warn('扫描到 %s:%s 存在redis空密码漏洞.'%(host,port))
                return True
        except:
            return False
        finally：
            s.close()



class EXP(BaseEXP):
  pass

